package com.ky.client.service;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

import org.apache.commons.io.FileUtils;

import com.ky.client.util.ConfigConstants;
import com.ky.client.util.PropertiesUtil;
import com.ky.client.util.RequestUtil;
import com.ky.common.dto.Dto;
import com.ky.common.entity.KyFile;
import com.ky.common.util.KeyConstants;

public class FileListService implements Service {

	@SuppressWarnings("resource")
	@Override
	public Service service() {

		Service nextService = null;
		Scanner scanner = new Scanner(System.in);
		while (true) {
			// 从客户端向服务器端发起请求
			Dto<Object> requestDto = new Dto<>();
			requestDto.setKey(KeyConstants.FILELIST);

			// 创建RequestUtil对象
			RequestUtil<Object> requestUtil = new RequestUtil<>();
			// 通过RequestUtil.request()向服务器端发起请求
			Dto<KyFile[]> responseDto = requestUtil.request(requestDto);// 返回数组类型

			// 判断服务器的响应码
			if (responseDto.getCode() == 200) {
				System.out.println("编号\t名称\t\t大小(单位：KB)\t\t\t路径");
				KyFile[] files = responseDto.getData();
				// 循环输出文件列表
				for (int i = 0; i < files.length; i++) {
					System.out.println(files[i].getId() + "\t\t" + files[i].getName() + "\t\t"
							+ String.format("%.2f", files[i].getSize() / 1024.0) + "\t\t" + files[i].getPath());
				}
				System.out.print("请选择要下载的文件编号：");
				int index = scanner.nextInt();
				// 再向服务器发送一个下载的请求，封装请求要传输的数据
				Dto<Long> downloadRequestDto = new Dto<>();// 类型为long类型
				downloadRequestDto.setKey(KeyConstants.DOWNLOAD);
				downloadRequestDto.setData((long) index);

				// 向服务器发送下载请求
				RequestUtil<Long> downloadRequestUtil = new RequestUtil<>();
				Dto<byte[]> downloadResponseDto = downloadRequestUtil.request(downloadRequestDto);
				// 判断问价下载是否成功
				if (downloadResponseDto.getCode() == 200) {
					// 把下载的文件保存到某个目录中
					// 先获取字节数组，再将该字节数组写入文件中
					byte[] data = downloadResponseDto.getData();
					// 通过file对象关联目录
					File parentFile = new File(PropertiesUtil.getProperty(ConfigConstants.CLIENT_DOWNLOAD_PATH_KEY));
					// 判断文件夹是否存在
					if (!parentFile.exists()) {
						// 如果不存在则创建该文件夹
						parentFile.mkdirs();
					}
					// 创建一个文件，文件下载后保存的目标文件
					File destFile = new File(parentFile, files[index - 1].getName());
					// 利用FileUtils中的writeByteArrayToFile()方法将字节数组写为文件类型
					try {
						FileUtils.writeByteArrayToFile(destFile, data);
						System.out.println("文件下载成功！");
					} catch (Exception e) {
						e.printStackTrace();
					}
				} else {
					System.out.println("文件下载失败，原因：" + downloadResponseDto.getErrorMsg());
				}

			}else {
				System.out.println("文件列表获取失败，原因："+responseDto.getErrorMsg());
			}
			System.out.print("继续操作请输入y，返回开始页请输入n。请输入：");
			String choice=scanner.next();
			if("n".equals(choice)) {
				nextService=new StartService();
				break;
			}
		}

		return nextService;
	}

}
